// uni对象浏览器环境适配层

// 检查是否在UniApp环境中 - 使用window对象来检查，避免在声明前访问uni变量
const isUniApp = typeof window !== 'undefined' && typeof window.uni !== 'undefined';

// 创建适配的uni对象
const uniAdapter = {
  // 存储API适配
  getStorageSync(key) {
    if (isUniApp) {
      return window.uni.getStorageSync(key);
    } else {
      // 浏览器环境使用localStorage
      try {
        const value = localStorage.getItem(key);
        return value ? JSON.parse(value) : null;
      } catch (e) {
        console.error('获取本地存储失败:', e);
        return null;
      }
    }
  },
  
  setStorageSync(key, value) {
    if (isUniApp) {
      return window.uni.setStorageSync(key, value);
    } else {
      // 浏览器环境使用localStorage
      try {
        localStorage.setItem(key, JSON.stringify(value));
      } catch (e) {
        console.error('设置本地存储失败:', e);
      }
    }
  },
  
  removeStorageSync(key) {
    if (isUniApp) {
      return window.uni.removeStorageSync(key);
    } else {
      // 浏览器环境使用localStorage
      try {
        localStorage.removeItem(key);
      } catch (e) {
        console.error('移除本地存储失败:', e);
      }
    }
  },
  
  // 导航API适配
  navigateTo(options) {
    if (isUniApp) {
      return window.uni.navigateTo(options);
    } else {
      // 浏览器环境使用window.location
      const { url } = options;
      // 将小程序的路径转换为浏览器路径
      const browserUrl = url.replace(/^\//, '').replace(/\//g, '#/');
      window.location.href = `#${browserUrl}`;
    }
  },
  
  // 切换Tab页API适配
  switchTab(options) {
    if (isUniApp) {
      return window.uni.switchTab(options);
    } else {
      // 浏览器环境使用window.location
      const { url } = options;
      // 将小程序的路径转换为浏览器路径
      const browserUrl = url.replace(/^\//, '').replace(/\//g, '#/');
      window.location.href = `#${browserUrl}`;
    }
  },
  
  // 弹窗API适配
  showToast(options) {
    if (isUniApp) {
      return window.uni.showToast(options);
    } else {
      // 浏览器环境使用alert
      const { title } = options;
      console.log(`[Toast]: ${title}`);
      // 创建一个简单的toast元素
      const toast = document.createElement('div');
      toast.style.cssText = `
        position: fixed;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        background: rgba(0, 0, 0, 0.7);
        color: white;
        padding: 10px 20px;
        border-radius: 4px;
        z-index: 9999;
        font-size: 14px;
      `;
      toast.innerText = title;
      document.body.appendChild(toast);
      
      // 2秒后移除toast
      setTimeout(() => {
        if (toast.parentNode) {
          toast.parentNode.removeChild(toast);
        }
      }, 2000);
    }
  },
  
  // 获取网络类型API适配
  getNetworkType(options) {
    if (isUniApp) {
      return window.uni.getNetworkType(options);
    } else {
      // 浏览器环境模拟
      const { success } = options;
      if (success) {
        // 检查浏览器网络连接状态
        const isOnline = navigator.onLine;
        success({
          networkType: isOnline ? 'wifi' : 'none'
        });
      }
    }
  },
  
  // 监听网络状态变化API适配
  onNetworkStatusChange(callback) {
    if (isUniApp) {
      return window.uni.onNetworkStatusChange(callback);
    } else {
      // 浏览器环境监听online和offline事件
      window.addEventListener('online', () => {
        callback({
          isConnected: true,
          networkType: 'wifi'
        });
      });
      
      window.addEventListener('offline', () => {
        callback({
          isConnected: false,
          networkType: 'none'
        });
      });
    }
  },
  
  // 音频播放API适配
  createInnerAudioContext() {
    if (isUniApp) {
      return window.uni.createInnerAudioContext();
    } else {
      // 浏览器环境使用Audio对象
      const audio = new Audio();
      
      // 返回一个兼容UniApp InnerAudioContext的对象
      return {
        src: '',
        onError: (callback) => {
          audio.onerror = (event) => {
            callback({
              errMsg: '播放失败',
              code: event.target.error.code
            });
          };
        },
        play: () => {
          try {
            audio.play().catch(err => {
              console.error('音频播放失败:', err);
            });
          } catch (e) {
            console.error('音频播放异常:', e);
          }
        },
        // 设置src的setter
        set src(value) {
          audio.src = value;
        }
      };
    }
  }
};

// 导出适配的uni对象
// 如果在UniApp环境中，直接使用原生的uni对象
// 否则使用我们的适配层
export default isUniApp ? window.uni : uniAdapter;